import { baseUrl } from "../api/env.js";//域名地址
/**在src文件下新建utils文件夹，在utils文件下新建reques.js ， 在reques.js里面进行封装网络请求* ***/
//  先引入axios和qs
import axios from 'axios'
import qs from 'query-string'
/***** 处理404，400，就是错误信息，就应该 返回登陆* *****/
import router from '../router'
// 请求头在 store 中所以还是先引入，现在先注释store，用不到怕报错，先注释，以及上面引入的token
// import  store from '../store'
const toLogin = () => {
    // router.push("/login")
}
// 错误信息的响应方法，errorHandle 会在响应拦截里面调用
const errorHandle = (status, other) => {
    // 判断 如果status的状态值，你传过来，这个
    switch (status) {
        case 400:
            // 请求头和服务器的限制
            console.log("服务器不理解请求的 语法");
            toLogin()
            break;
        case 401:
            // token验证失败，用户身份验证失败
            console.log("未授权，请求要求身份验证");
            toLogin()
            break;
        case 403:
            // 身份过期用户，服务器请求限制，比如你10分钟只允许请求4次。四次之后不让你再请求
            console.log("禁止，服务器拒绝请求");
            toLogin()
            break;
        case 404:
            // 网络请求地址资源
            console.log("未找到，服务器找不到请求的网页");
            break;
        default:
            console.log(other);
    }

}
// 创建axios对象
axios.defaults.timeout = 60000; //设置1分钟超时时间
const instance = axios.create({
    timeout: 5000 //请求超时
})
// 全局配置
instance.defaults.baseURL =baseUrl;//设置默认接口地址
// 创建请求拦截和响应拦截操作 这个再官网有，但是自己写一个简易的
// 官网https://www.kancloud.cn/yunye/axios/234845  搜索拦截器
// 创建请求拦截 使用es6的箭头函数
instance.interceptors.request.use(config => {
    if (config.method === 'post') {// 配置
        console.log('----',config)
        config.headers['Content-Type'] = 'application/json;charset=UTF-8'
        // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;'
        // config.data = qs.stringify(config.data); //总是表单形式
    }
    // 判断token是否存在。存在则携带，通过请求头，先在上面引入store，
    // 现在先注释token，用不到怕报错，先注释，以及上面引入的store
    // const token=store.state.LoginModule.token;
    // if (token) {
        // 携带token
        // config.headers.authorization = token;
        // config.headers.common['loginToken'] = token;
        // config.headers.common['language'] = "zh_CN"
    // }
    return config;
},
    error => Promise.reject(error)
)

// 响应拦截
// 成功
/* response=>
成功与失败的判断
1.请求成功和请求失败
2.请求成功：结果的成功和结果的失败
*/
instance.interceptors.response.use(
    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
    error => {
        const { response } = error;//Es6的解构赋值
        /**
         * response包含的信息有
         * status 状态码200
         * data  信息
         */
        if (response) {
            //   给出开发者的具体的错误信息
            errorHandle(response.status, response.data)
            // 抛出错误信息 400-404
            return Promise.reject(response)
        } else {
            // 断网或者请求中断
            console.log("断网或者请求中断");
        }
    }
)
export default instance;